package com.wk.code.wkserver.service;

import com.wk.code.wkserver.entity.Demand;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wk.code.wkserver.request.admin.AdminDemandRequest;
import com.wk.code.wkserver.request.app.DemandPageRequest;
import com.wk.code.wkserver.request.app.DemandRequest;
import com.wk.code.wkserver.request.app.DemandVerifyRequest;
import com.wk.code.wkserver.request.base.BasePageRequest;
import com.wk.code.wkserver.response.admin.DemandResponse;
import com.wk.code.wkserver.response.app.AppDemandResponse;
import com.wk.code.wkserver.response.base.PageInfo;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author wq
 * @since 2021-08-15
 */
public interface IDemandService extends IService<Demand> {


    /**
     * 发布需求
     *
     * @param userId  用户ID
     * @param request 请求参数
     */
    void publish(Integer userId, DemandRequest request);


    /**
     * 前台分页查询
     *
     * @param request 请求参数
     * @return PageInfo<AppDemandResponse>
     */
    List<AppDemandResponse> acquire(DemandPageRequest request);

    /**
     * 审核需求
     *
     * @param request request
     */
    void verifyDemand(Integer sysUserId, DemandVerifyRequest request);


    /**
     * 查询需求详情
     *
     * @param id ID
     * @return DemandResponse
     */
    DemandResponse detail(Integer id);


    /**
     * 需求详情
     *
     * @param userId 用户ID
     * @param id     需求ID
     * @return AppDemandResponse
     */
    AppDemandResponse demandDetail(Integer userId, Integer id);


    /**
     * 增加需求浏览量
     *
     * @param demandId 需求ID
     */
    void updateViewCount(Integer demandId);


    /**
     * 设置下单金额
     *
     * @param demandId demandId
     */
    void updateOrderAmount(Integer demandId, BigDecimal orderAmount);

    /**
     * 设置已完成
     *
     * @param demandId 需求ID
     */
    void updateFinish(Integer demandId);


    /**
     * 需求列表
     *
     * @param sysUserId 系统用户ID
     * @param request   请求参数
     * @return DemandResponse
     */
    PageInfo<DemandResponse> page(Integer sysUserId, AdminDemandRequest request);

    /**
     * 查询发布需求数量
     *
     * @param userId 用户ID
     * @return Integer
     */
    Integer acquireDemandCount(Integer userId);


    /**
     * 申请接单
     *
     * @param demandId   用户ID
     * @param techUserId 接单用户ID
     */
    void applyOrderTaker(Integer demandId, Integer techUserId);

    /**
     * 根据需求ID查询需求
     *
     * @param demandId 需求ID
     * @return Demand
     */
    Demand selectOrderDemand(Integer demandId);


    /**
     * 我的需求列表
     *
     * @param userId 用户ID
     * @return List<AppDemandResponse>
     */
    List<AppDemandResponse> mineDemand(Integer userId);

    /**
     * 查询用户需求数量
     *
     * @param userId 用户ID
     * @return Integer
     */
    Integer selectUserDemandCount(Integer userId);


    /**
     * 删除需求
     *
     * @param demandId 需求ID
     * @param userId   用户ID
     */
    void deleteDemand(Integer demandId, Integer userId);

    /**
     * 查询所有需求列表
     *
     * @param demandNoTakings demandNoTakings
     * @return List<Demand>
     */
    List<Demand> selectDemandList(ArrayList<Integer> demandNoTakings);

    /**
     * 后台更新需求状态 接单取消
     *
     * @param demandId 需求状态
     */
    void updateDemandCancel(Integer demandId);


    /**
     * 后台删除需求
     *
     * @param demandId 需求ID
     */
    void deleteDemand(Integer demandId);


    /**
     * 取消订单 进行中的需求修改为待接单
     *
     * @param demandId 需求ID
     */
    void demandOrderCancel(Integer demandId);

    /**
     * 设置淘宝订单号
     *
     * @param demandId  需求号
     * @param tbOrderNo 淘宝订单
     */
    void setTbOrder(Integer demandId, String tbOrderNo);

    /**
     * 查询接单数量
     *
     * @param userId 用户ID
     * @return Integer
     */
    Integer selectUserTakeOrderCount(Integer userId);
}
